iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
0
自我挑戰組

初心者學C#系列 第 8

Day 8:C#的類型轉換 (∿°○°)∿

  • 分享至 

  • xImage
  •  

※以下內容皆是新手撰寫,內容可能不完全正確

(查陌生單字花的時間加起來已經比理解所述內容多太多了(Q_Q))

類型轉換(或型式/型態轉換,Type Conversion) 是將一種型式的資料轉成另一種,也稱作型別轉換(Type Casting),分兩種型態:隱含類型轉換與明確類型轉換。

隱含類型轉換(implicit type conversion)
隱含類型轉換是C#以型式安全(type-safe)的方式進行轉換,像是把小的積分類型(integral types)轉換成大的,或是將衍生類別(derived classes)轉換成基礎類別(base classes)。舉例,int可以轉換成double,因為當中不會有資料損失,可是能儲存較多資料的double卻不能用這個方法轉換成儲存較少資料的int。

int d = 7;
double b = d;

明確類型轉換(explicit type conversion)
明確類型轉換是使用者用已定義的涵式(predefined functions)進行類型轉換,必須使用鑄型運算子(cast operator)。鑄型運算子能強行將一種資料轉換成另一種,這時候double便能夠轉換成int,而這類的運算子用 ( ) 在欲轉換之資料作前綴,並在括號內(如下)。

double yee = 9487.87;
int dinosaur;
dinosaur = (int)yee;
Console.WriteLine(dinosaur);

上面這串執行後會輸出(取整數):

9487

以下是用ToString轉換方法的例子:

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 180;
            double y = 948787.87;
            bool z = false;
            Console.WriteLine(x.ToString());
            Console.WriteLine(y.ToString());
            Console.WriteLine(z.ToString());

        }
    }
}
執行以上會輸出:
180
948787.87
False //這個false的f變大寫了

再來是int.Parse和Convert.ToInt32方法(把string變成int)的例子:

using System;
namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            string a = "87";
            string b = "100";
            Console.WriteLine(int.Parse(a));
            Console.WriteLine(Convert.ToInt32(b));
        }
    }
}

執行這些會輸出:

87
100

Convert.ToInt32和Parse的差別在於Convert.ToInt32以物件作為其值,且Convert.ToInt32不會在值是null的時候丟出ArgumentNullException(某個不該是null的值是null時)。

下面是C#所有內建的轉換方法:
https://docs.microsoft.com/en-us/dotnet/api/system.convert?view=netframework-4.7.2

參考資料:
(a) Tutorialspoint; C# - Type Conversion
https://www.tutorialspoint.com/csharp/csharp_type_conversion.htm
(b) Codecademy; Learn C#
https://www.codecademy.com/courses/learn-c-sharp
(c) Microsoft; Convert Class
https://docs.microsoft.com/en-us/dotnet/api/system.convert?view=netframework-4.7.2
(d) StackOverflow; What's the main difference between int.Parse() and Convert.ToInt32
https://stackoverflow.com/questions/199470/whats-the-main-difference-between-int-parse-and-convert-toint32


上一篇
Day 7:C#的資料類型 (●´Д`●)
下一篇
Day 9:C#的變數 ( ͡° ͜ʖ ͡°)嘿嘿嘿
系列文
初心者學C#30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言